/*
 * Copyright (c) 2025 CAX Conversion Project
 */
package com.comac.ins.common.core.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.context.event.EventListener;

import com.comac.ins.common.core.enums.BizEventTypeEnum;

/**
 *
 * 业务事件监听注解
 * @author zhanghongyi
 * @date 2024/7/5 15:04
 * @description BizEventListener
 */
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@EventListener
public @interface BizEventListener {

    /**
     * 默认业务事件使用异步执行，事件发布方可以设置BizEvent.async，事件监听方可以设置BizEventListener.async 来控制使用同步方法进行事件执行。
     * 以便于有顺序依赖需要同步调用，但又想解耦的场景。
     * */
    boolean async() default true;


    /**
     * 监听的业务事件类型（如果不填则不进行过滤直接根据事件的泛型参数进行监听路由，在使用公共数据对象作为事件载荷时，建议增加此参数，以避免错误的回调）
     * */
    BizEventTypeEnum[] listenedBizEvent() default {BizEventTypeEnum.DEFAULT_EVENT};
}
